package org.shj.pattern.memento;

/**
 * 在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态
 * 主要解决： 使对象恢复到保存前的状态
 * 应用场景： 1. 后悔药  2. 打游戏时存档   3. Windows里的ctrl+z 4. 数据库事务管理 等
 * 缺点： 消耗资源。如果类的成员变量过多，势必会占用比较大的资源。
 */
public class Main {

	public static void main(String[] args){
		Originator o = new Originator();
		o.setStatus("On");
		o.show();
		
		Caretaker c = new Caretaker();
		c.setMemento(o.createMemento());
		
		o.setStatus("OFF");
		o.show();
		
		o.restore(c.getMemento());
		o.show();
	}
}
